package ar.frba.utn.diseñosistemas.TP2;

import java.util.ArrayList;

import org.uqbar.commons.utils.Observable;

@Observable
public class Usuario {
	
	private String nombre;
	private String apellido;
	private String dni;
	
	private ArrayList<Busqueda> BusquedasGuardadas;
	private ArrayList<Asiento> AsientosComprados;
	private ArrayList<Asiento> AsientosReservados;
	private TipoUsuario tipoUsuario; 
	
	public Usuario(String nombre, String apellido, String dni, TipoUsuario tipoUsuario)
	{
		this.setApellido(apellido);
		this.setDni(dni);
		this.setNombre(nombre);
		
		this.BusquedasGuardadas = new ArrayList<Busqueda>();
		this.AsientosComprados = new ArrayList<Asiento>();
		this.AsientosReservados = new ArrayList<Asiento>();
		
		tipoUsuario.setUsuario(this);
		this.tipoUsuario = tipoUsuario;
	}
	
	public ArrayList<Itinerario> Buscar(Busqueda unaBusqueda)
	{
		this.BusquedasGuardadas.add(unaBusqueda);
		return this.tipoUsuario.buscar(unaBusqueda);
	}
	
	public void Comprar(Itinerario unItinerario)
	{		
		this.tipoUsuario.comprar(unItinerario);
		
		for (Asiento unAsiento : unItinerario.getAsientos()){
			this.AsientosComprados.add(unAsiento);
		}
	}
	
	public void reservar(ArrayList<Asiento> unosAsientos)
	{
		this.tipoUsuario.reservar(unosAsientos);
		this.AsientosReservados.addAll(unosAsientos);
	}
	
	public float TotalCompras()
	{
		float total = 0;
		for (Asiento unAsiento : AsientosComprados) {
			total += unAsiento.getPrecio();
		}
		
		return total;
	}

	public ArrayList<Busqueda> getBusquedasGuardadas() {
		return BusquedasGuardadas;
	}
	public ArrayList<Asiento> getAsientosComprados() {
		return AsientosComprados;
	}
	public ArrayList<Asiento> getAsientosReservados(){
		return this.AsientosReservados;
	}
	
	public TipoUsuario getTipoUsuario() {
		return tipoUsuario;
	}
	public void setTipoUsuario(TipoUsuario tipoUsuario) {
		this.tipoUsuario = tipoUsuario;
	}
	
	public String getNombre() {
		return this.nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public String getApellido() {
		return this.apellido;
	}
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	
	public String getDni() {
		return this.dni;
	}
	public void setDni(String dni) {
		this.dni = dni;
	}

	public String getNombreCompleto()
	{
		return String.format("%s %s", this.getNombre(), this.getApellido());
	}
}
